package com.answer.utils;

import com.answer.common.ErrorCode;
import com.answer.exception.BusinessException;

/**
 * 抛异常工具类
 */
public class ThrowUtils {

    /**
     * 根据条件抛出异常
     * <p>
     * 此方法用于在满足特定条件时抛出自定义异常这在进行参数验证或其他运行时检查时非常有用
     *
     * @param condition 需要检查的条件如果条件为true，则抛出异常
     * @param runtimeException 要抛出的异常对象
     * @throws RuntimeException 如果条件为true，则抛出此异常
     */
    public static void throwIf(boolean condition, RuntimeException runtimeException) {
        if (condition) {
            throw runtimeException;
        }
    }


    /**
     * 根据条件判断抛出指定错误码的异常
     * 此方法用于在满足某个条件时，抛出自定义的业务异常，异常中包含了错误码信息
     *
     * @param condition 条件判断，如果为true，则抛出异常
     * @param errorCode 错误码，用于标识具体的错误类型
     * @throws BusinessException 自定义的业务异常，当条件为true时抛出
     */
    public static void throwIf(boolean condition, ErrorCode errorCode) {
        throwIf(condition, new BusinessException(errorCode));
    }

    /**
     * 根据条件判断抛出指定的业务异常
     * 此方法用于在满足特定条件时，抛出一个业务异常，以便调用者可以根据错误码和错误信息进行错误处理
     *
     * @param condition  判断条件，如果为true，则抛出异常
     * @param errorCode  业务错误码，用于标识具体的错误类型
     * @param message    错误信息，提供关于错误的详细描述
     * @throws BusinessException 如果条件为true，抛出业务异常
     */
    public static void throwIf(boolean condition, ErrorCode errorCode, String message) {
        throwIf(condition, new BusinessException(errorCode, message));
    }
}
